package com.sourcetrip.algorithm.abs;

import com.sourcetrip.algorithm.inter.Sort;

/**
 * @author: xiaomi
 * @date: 2020/12/27
 * @description:
 */
public abstract class AbstractSort implements Sort {

    @Override
    public int[] sort(int[] arr) {
        checkArr(arr);
        return sortArr(arr);
    }

    public int[] sort(Integer[] arr) {
        int[] array = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            array[i] = arr[i];
        }
        return sort(array);
    }


    /**
     * 钩子方法
     * 升序排序
     *
     * @param arr
     * @return
     */
    protected abstract int[] sortArr(int[] arr);

    //region    utils


    /**
     * 交换数组中 index1 和 index2 元素的位置
     *
     * @param arr
     * @param index1
     * @param index2
     */
    protected void swap(int[] arr, int index1, int index2) {
        int temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }

    //endregion
}
